import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;

public class Iniciador extends IdentificadorSemTexto implements
		RetanguloListener, IElementosPartida, IOperadoresSemTexto {

	/**
	 * @uml.property name="ligacaoEntrada"
	 * @uml.associationEnd inverse="terminador:Ligacao"
	 */
	// private LigacaoIdentificadorDestino ligacao;;

	/**
	 * 
	 */
	private static final long serialVersionUID = -5443792483442566018L;

	/**
	 * @uml.property name="retaguloAr"
	 */
	private RoundRectangle2D retanguloAr;

	private String identificacao;

	/**
	 */

	public Iniciador(String identificacao, Retangulo retanguloEnvolvente) {
		super(identificacao, retanguloEnvolvente);
		retanguloEnvolvente.setRetanguloListener(this);
		this.identificacao = identificacao;
		this.retanguloAr = new RoundRectangle2D.Double();
		construirIniciador();
	}

	/**
		 */
	public void construirIniciador() {
		int x = retanguloEnvolvente.getPontoSuperiorEsquerdo().getX();
		int y = retanguloEnvolvente.getPontoSuperiorEsquerdo().getY();
		int largura = retanguloEnvolvente.getTamanho().getLargura();
		int altura = retanguloEnvolvente.getTamanho().getAltura();
		int larguraArc = retanguloEnvolvente.getTamanho().getArcLargura();
		int alturaArc = retanguloEnvolvente.getTamanho().getArcAltura();
		this.retanguloAr.setRoundRect(x, y, altura, largura, alturaArc,
				larguraArc);
	}

	@Override
	public void retanguloAlterado() {
		construirIniciador();
	}

	@Override
	public void desenhar(Graphics graphics) {
		Graphics2D g2 = (Graphics2D) graphics.create();

		g2.draw(retanguloAr);

		g2.setColor(Color.BLACK);
		g2.drawString(identificacao, retanguloEnvolvente
				.getPontoSuperiorEsquerdo().getX() + 10, retanguloEnvolvente
				.getPontoSuperiorEsquerdo().getY() + 15);
		g2.dispose();
	}

	@Override
	public boolean isSob(Coordenada coordenada) {
		return this.retanguloEnvolvente.contem(coordenada);
	}

	@Override
	public boolean podeAssociar(Identificador identificador) {
		if (ligacao == null && identificador != this)
			return true;
		return false;
	}

	@Override
	public LigacaoIdentificadorDestino associar(
			Identificador identificadorDestino) {
		this.ligacao = new LigacaoIdentificadorDestino(this,
				identificadorDestino);
		return ligacao;

	}

	public void resetTeste() {
		this.ligacao = null;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		System.out.println("AQUI ESTOU");
		sb.append("Iniciador\n");
		sb.append("Altura" +this.retanguloEnvolvente.getTamanho().getAltura()+"\n");
		sb.append("Largura"+ this.retanguloEnvolvente.getTamanho().getLargura()+"\n");
		sb.append("Posicao X:"+ this.retanguloEnvolvente.getPontoSuperiorEsquerdo().getX()+"\n");
		sb.append("Posicao Y:"+ this.retanguloEnvolvente.getPontoSuperiorEsquerdo().getY()+"\n");
		return sb.toString();
	}

}
